當我們在建立任意專案的時候,常會看到這樣的寫法class Post < ActiveRecord::Base
我們知道<
符號是繼承家產的概念 (疑?
但是ActiveRecord::Base中間的兩個冒號::
代表是什麼意思呢?
如果去文件查看,會發現在模組ActiveRecord裡面有一個Base
的類別,這表示Post這個類別,繼承ActiveRecord模組裡的Base類別。
module ActiveRecord
# ... 略
class Base
extend ActiveModel::Naming
extend ActiveSupport::Benchmarkable
extend ActiveSupport::DescendantsTracker
extend ConnectionHandling
extend QueryCache::ClassMethods
# ... 略
end
end
如果還不是很清楚,那我們另用點簡單的魔法技能例子來看,character它include Skill::Sorcery
因此可以成功拿到fireball
方法
module Skill
module Sorcery
def fireball
puts “Attack!”
end
end
end
def character
include Skill::Sorcery
end
character.fireball # Attack!
不論module或是class都可以互相包容,最後它會構成一個「巢狀結構」,這剛好拿來當namespace包裝。
那除了類別以及模組,使用常數Constant也是可以的
module Skill
module Sorcery
Speed = "3s"
def fireball
puts "Attack!"
end
end
end
puts Skill::Sorcery::Speed # 3s
千萬要記得在使用namespace::
時,必需給正確完整的路徑才能執行,不然會出現錯誤喔。
參考連結:
Ruby 語法放大鏡之「有時候會看到有兩個冒號寫法是什麼意思?」